package com.kinghood.productcenter.controller.base;

import com.kinghood.infrastructure.api.authority.SysLogModuleEnum;
import com.kinghood.infrastructure.aspect.OperatorLog;
import com.kinghood.infrastructure.model.KingHoodResponseVO;
import com.kinghood.infrastructure.model.dto.StatusReqDTO;
import com.kinghood.productcenter.common.model.dao.base.BaseProductTemplateDO;
import com.kinghood.productcenter.common.model.dto.base.AddOrUpdateTemplateReqDTO;
import com.kinghood.productcenter.common.model.dto.base.ListTemplateQueryDTO;
import com.kinghood.productcenter.common.model.vo.product.ProductTemplateInfoVO;
import com.kinghood.productcenter.service.base.IBaseProductTemplateService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.List;
import java.util.Objects;

/**
 * <p>
 * 基础选项-模板 前端控制器
 * </p>
 *
 * @author KingHood
 * @since 2023-12-20
 */
@Slf4j
@RequiredArgsConstructor
@RestController
@RequestMapping("/baseProductTemplate")
public class BaseProductTemplateController {

    private final IBaseProductTemplateService productTemplateService;

    /**
     * 列表
     *
     * @author jp
     * @date 2023/12/20
     */
    @PostMapping("/pageTemplate")
    public KingHoodResponseVO pageTemplate(@RequestBody ListTemplateQueryDTO param) {
        return KingHoodResponseVO.success(productTemplateService.pageTemplate(param));
    }

    /**
     * 模板详情
     *
     * @param id 入参
     * @return 模板信息
     * @author zfj
     * @date 2024/01/24
     */
    @GetMapping("/getProductTemplateById/{id}")
    public KingHoodResponseVO<ProductTemplateInfoVO> getProductTemplateById(@PathVariable("id") Long id) {

        return KingHoodResponseVO.success(productTemplateService.getProductTemplateById(id,false));
    }

    /**
     * 保存或者修改模板
     *
     * @param in 入参
     * @return 模板数据
     * @author zfj
     * @date 2024/01/24
     */
    @PostMapping("/addOrUpdateTemplate")
    public KingHoodResponseVO<Long> addOrUpdateTemplate(@Valid @RequestBody AddOrUpdateTemplateReqDTO in) {

        if (Objects.isNull(in.getProductTemplateId())) {
            return KingHoodResponseVO.success(productTemplateService.addTemplate(in));
        }

        return KingHoodResponseVO.success(productTemplateService.updateTemplate(in));
    }

    /**
     * 保存模板数据
     *
     * @param in 入参
     * @return 模板数据
     * @author zfj
     * @date 2024/01/24
     */
    @PostMapping("/addTemplate")
    public KingHoodResponseVO<Long> addTemplate(@RequestBody AddOrUpdateTemplateReqDTO in) {

        return KingHoodResponseVO.success(productTemplateService.addTemplate(in));
    }

    /**
     * 修改模板
     *
     * @param in 模板数据
     * @return 模板id
     * @author zfj
     * @date 2024/01/24
     */
    @PostMapping("/updateTemplate")
    public KingHoodResponseVO<Long> updateTemplate(@RequestBody AddOrUpdateTemplateReqDTO in) {

        return KingHoodResponseVO.success(productTemplateService.updateTemplate(in));
    }


    /**
     * 模板下拉列
     *
     * @return 模板
     * @author zfj
     * @date 2024/01/26
     */
    @PostMapping("/getTemplateList")
    public KingHoodResponseVO<List<BaseProductTemplateDO>> getTemplateList() {

        return KingHoodResponseVO.success(productTemplateService.getTemplateList());
    }

    /**
     * 根据id删除
     *
     * @param id id
     * @return @return {@link KingHoodResponseVO }
     * @author jp
     * @date 2024/01/29 10:49
     */
    @OperatorLog(module = SysLogModuleEnum.Type.PRODUCT_TEMPLATE,content = "模版管理-删除模版")
    @RequestMapping(value = "/delTemplate/{id}")
    public KingHoodResponseVO delTemplate(@PathVariable("id") Long id){
        productTemplateService.delTemplate(id);
        return KingHoodResponseVO.success();
    }

    /**
     * 更新模版状态
     *
     * @param param 参数
     * @author jp
     * @date 2023/12/21
     */
    @OperatorLog(module = SysLogModuleEnum.Type.PRODUCT_TEMPLATE,content = "模版管理-修改状态")
    @PostMapping(value = "/updateTemplateStatus")
    public KingHoodResponseVO updateTemplateStatus(@Valid @RequestBody StatusReqDTO param){
        productTemplateService.updateTemplateStatus(param);
        return KingHoodResponseVO.success();
    }
}
